Yvue.prototype.mount = function () {
  //  需要提供个render 方法 生成虚拟dome
  this.render = this.createRenderFn();

  this.mountComponent();
};
Yvue.prototype.mountComponent = function () {
  // 执行mountComponent
  let mount = () => {
    this.upData(this.render());
  };
  mount.call(this); // 本质交个watcher 来调用
};
// 这里是生成render 函数目的是缓存抽象语法树 用虚拟dome 模拟
Yvue.prototype.createRenderFn = function () {
  // 带坑的 生成vnode
  let ast = getVnode(this._template);
  // ast 与data 生成新的vnode   我们用 带坑的 vnode 与data 生成新的vnode
  return function render() {
    let temp = combine(ast, this._data);
    return temp;
  };
};
// 将虚拟dome  渲染到dome 中 ：deff 算法就在这
Yvue.prototype.upData = function (vnode) {
  // 简化 , 直接生成html dom 替换到页面中
  let raldom = paseVnode(vnode);
  this._parent.replaceChild(raldom, document.querySelector(this._options.el));
};
